home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / incl / LEDA.020+881 / matrix.h < prev    next >
C/C++ Source or Header  |  1994-08-05  |  2KB  |  103 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  matrix.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_MATRIX_H
  16. #define LEDA_MATRIX_H
  17.  
  18. //------------------------------------------------------------------------------
  19. //  matrices
  20. //------------------------------------------------------------------------------
  21.  
  22. #include <LEDA/basic.h>
  23. #include <LEDA/vector.h>
  24.  
  25.  
  26. class matrix
  27. {
  28.   vector** v;
  29.   int  d1;
  30.   int  d2;
  31.  
  32.   void     flip_rows(int,int);
  33.   void     check_dimensions(const matrix&) const; 
  34.   double&  elem(int i, int j) const { return v[i]->v[j]; }
  35.   double** triang(const matrix&, int&) const;
  36.     
  37. public:
  38.  
  39.   matrix(int=0, int=0);
  40.   matrix(const matrix&);
  41.   matrix(const vector&);
  42.   matrix(int,int,double**);
  43.  
  44.   matrix& operator=(const matrix&);
  45.  
  46.  ~matrix();
  47.  
  48.   LEDA_MEMORY(matrix)
  49.  
  50.  
  51. int     dim1()  const  {  return d1; }
  52. int     dim2()  const  {  return d2; }
  53.  
  54. vector& row(int) const;
  55. vector  col(int i) const;
  56. matrix  trans() const;
  57.  
  58. matrix  inv()   const;
  59. double  det()   const;
  60.  
  61. matrix solve(const matrix&) const;
  62. vector solve(const vector& b) const { return vector(solve(matrix(b))); }
  63.  
  64. operator vector() const; 
  65.  
  66. int     operator==(const matrix&)    const;
  67. int     operator!=(const matrix& x)  const { return !(*this == x); }
  68.  
  69. vector& operator[](int i)    const { return row(i); }
  70.  
  71. double& operator()(int,int);
  72. double  operator()(int,int) const;
  73.  
  74. matrix operator+(const matrix&);
  75. matrix operator-(const matrix&);
  76. matrix operator-(); // unary
  77.  
  78. matrix& operator-=(const matrix&);
  79. matrix& operator+=(const matrix&);
  80.  
  81. matrix operator*(double);
  82. matrix operator*(const matrix&);
  83. vector operator*(const vector& v) { return vector(*this * matrix(v)); }
  84.  
  85. friend ostream& operator<<(ostream&, const matrix&);
  86. friend istream& operator>>(istream&, matrix&);
  87.  
  88. };
  89.  
  90. inline void Print(const matrix& m, ostream& out=cout) { out << m; }
  91. inline void Read(matrix& m, istream& in=cin)          { in >> m;  }
  92.  
  93. inline int compare(const matrix&, const matrix&) 
  94. { error_handler(1,"compare not defined for type `matrix`"); 
  95.   return 0;
  96.  }
  97.  
  98.  
  99. LEDA_TYPE_PARAMETER(matrix)
  100.  
  101. #endif
  102.